CREATE TABLE rodzic_dziecko
(
  child_id NUMBER,
  parent_id NUMBER,
  nazwa VARCHAR2(20),
  CONSTRAINT dziecko_PK PRIMARY KEY(child_id)
);
CREATE INDEX rodzic_fk on rodzic_dziecko(parent_id);
ALTER TABLE rodzic_dziecko ADD CONSTRAINT dziecko_FK FOREIGN KEY(parent_id) REFERENCES rodzic_dziecko(child_id);

INSERT INTO rodzic_dziecko(child_id, nazwa) VALUES(1,'Marta');
INSERT INTO rodzic_dziecko(child_id, nazwa) VALUES(2,'Zbigniew');
INSERT INTO rodzic_dziecko(child_id,PARENT_ID,NAZWA) values(3,1,'Franek');
INSERT INTO rodzic_dziecko VALUES(4,1,'Zosia');
INSERT INTO rodzic_dziecko VALUES(5,3,'Marian');

SELECT * FROM rodzic_dziecko;

SELECT b.nazwa, b.child_id
FROM rodzic_dziecko a 
         INNER JOIN rodzic_dziecko b
              ON b.parent_id = A.child_id OR (b.child_id = A.child_id AND A.parent_id IS NULL)
ORDER BY b.child_id ASC;

SELECT b.nazwa, b.child_id
FROM rodzic_dziecko a 
         INNER JOIN rodzic_dziecko b
              ON b.parent_id = a.child_id OR (b.child_id = a.child_id AND b.parent_id IS NULL)
WHERE A.parent_id IS NULL
ORDER BY a.parent_id, b.parent_id;

select nazwa, lpad(' ',5*(level-1)) || to_char(nazwa) 
FROM rodzic_dziecko 
START WITH parent_id IS NULL
connect by prior child_id = parent_id;


SELECT a.nazwa rodzic, b.nazwa dziecko FROM
(SELECT child_id, nazwa FROM
rodzic_dziecko ORDER BY child_id) a JOIN 
(SELECT parent_id, nazwa FROM
rodzic_dziecko WHERE parent_id IS NOT NULL) b
ON b.parent_id = A.child_id 
ORDER BY a.child_id;

SELECT a.nazwa rodzic, b.nazwa dziecko
FROM rodzic_dziecko a
  JOIN(SELECT parent_id, nazwa FROM rodzic_dziecko) b
  ON A.child_id = b.parent_id
ORDER BY a.child_id;
